import { fileURLToPath, URL } from 'node:url'

import { defineConfig } from 'vite'
import vue from '@vitejs/plugin-vue'
import vueDevTools from 'vite-plugin-vue-devtools'
//?导入使用jsx
import vueJsx from '@vitejs/plugin-vue-jsx'
//?导入自动路由
import VueRouter from 'unplugin-vue-router/vite';
//?导入element-plus
import AutoImport from 'unplugin-auto-import/vite'
import Components from 'unplugin-vue-components/vite'
import { ElementPlusResolver } from 'unplugin-vue-components/resolvers'
// https://vite.dev/config/
export default defineConfig({
  plugins: [
    //? 添加自动路由插件。注意，VueRouter 插件需要在 vue() 插件之前引入。
    // VueRouter({
    //   routesFolder: ['src/views/day1211', 'src/views/day1217', 'src/views/day1218', 'src/views/day1219', 'src/views/day1220', 'src/views/day1223', 'src/views/day1224', 'src/views/day1225', 'src/views/day1226', 'src/views/day1227', 'src/views/day1230'],//指定路由文件所在的目录
    //   extensions: ['.vue', '.js', '.jsx'], //指定路由文件的后缀名
    // }),
    vue(),
    vueJsx(),
    vueDevTools(),
    //?导入element-plus
    AutoImport({
      resolvers: [ElementPlusResolver()],
    }),
    Components({
      resolvers: [ElementPlusResolver()],
    }),
  ],
  resolve: {
    alias: {
      '@': fileURLToPath(new URL('./src', import.meta.url)),
    },
  },
  // build: {
  //   target: 'es2015',
  //   minify: 'terser',
  //   manifest: false,
  //   sourcemap: false,
  //   outDir: 'dist',
  // },

  /*-----------------------------------------配置启动服务开始，热更新---------------------------------------------- */
  server: { //这是 Vite 配置对象中的一部分，主要用来配置开发服务器的行为，比如端口、是否自动打开浏览器、是否启用热更新等。
    // 如果使用docker-compose开发模式，设置为false
    open: true, //表示在启动开发服务器时，自动打开浏览器。如果你设置为 false，则不会自动打开。
    port: Number(process.env.VITE_CLI_PORT), //指定开发服务器的端口 从环境变量中读取端口号，然后通过Number转换为数字
    proxy: {

      [process.env.VITE_BASE_API as string]: {  //这里使用了环境变量 VITE_BASE_API 作为代理的路径前缀，as string 是为了确保 TypeScript 可以识别这个值是字符串类型。比如，VITE_BASE_API 可以设置为 /api，这意味着所有请求以 /api 开头的路径都将被代理

        target: `${process.env.VITE_BASE_PATH}`, //target 是目标服务器的地址，所有符合条件的请求都会被代理到该地址。VITE_BASE_PATH 是从环境变量中获取的，它指定了后端服务的路径地址。例如，VITE_BASE_PATH 可能是 http://localhost:8080，所以所有 /api 开头的请求都会被转发到 http://localhost:8080。

        changeOrigin: true, //这个配置会修改请求头中的 Origin 字段，使其与目标服务器一致。通常用来处理跨域问题。比如，如果你请求的目标是 http://localhost:8080，默认情况下，浏览器会把请求的 Origin 设置为当前的 URL，但使用 changeOrigin: true 后，Origin 会被改为目标服务器的地址，避免跨域问题

        rewrite: (path) => path.replace(new RegExp('^' + process.env.VITE_BASE_API), ''),//这是一个路径重写的规则，用来改变请求路径。例如，如果请求的是 /api/user，而 VITE_BASE_API 配置为 /api，那么通过代理，路径会被重写为 /user。这意味着 /api/user 的请求会被代理到目标服务器的 /user 路径。

      },

      '/sse': {//'/sse'：这是直接匹配路径 /sse，表示所有以 /sse 开头的请求会被代理到目标地址。

        target: `${process.env.VITE_BASE_PATH}`, //目标服务器的地址与第一个代理配置相同，这里的请求会被转发到 process.env.VITE_BASE_PATH 指定的路径

        changeOrigin: true, //同样，这会改变请求头中的 Origin 字段，以避免跨域问题。

        rewrite: (path) => path.replace(new RegExp('^/sse'), ''),//这个配置会将请求路径中的 /sse 前缀去掉。例如，访问 /sse/events 会被重写为 /events，然后转发到目标地址
      },
    },
    // proxy: {
    //   '/api': {
    //     target: 'http://192.168.20.213:8989',
    //     changeOrigin: true,
    //     rewrite: (path) => path.replace(/^\/api/, ''), // 视情况需要重写路径
    //   },
    // },
  },
  /*-----------------------------------------配置启动服务结束，热更新---------------------------------------------- */
})
